#coding:utf-8

import requests
from bs4 import BeautifulSoup
import re
# 引入模块
import os
import threading

#要爬的地址
response = requests.get(
    url='http://www.biquge.com.tw/quanben/'
)
#设置编码
response.encoding = response.apparent_encoding
#获取页面对象
soup = BeautifulSoup(response.text,features='html.parser')

targe = soup.find(class_ ="ll")

item_list = targe.find_all(class_="item")

item_cotent_list =[]

a_content_list=[]

index_url = 'http://www.biquge.com.tw'

#本地存放小说目录列表
path_list = []

#小说章节URL列表
url_list = []

#线程列表
thread_list =[]

#生成小说txt
def getContent(url,path):
    item_content = requests.get(url)
    item_content.encoding = item_content.apparent_encoding
    content_html_soup=BeautifulSoup(item_content.text,features='html.parser')

    dd_list = content_html_soup.find(id="list").find("dl").find_all('dd')

    for dd_item in dd_list:
        item = dd_item.find('a').attrs.get('href')
        content_item_html = requests.get(index_url+item)

        content_item_html.encoding = content_item_html.apparent_encoding
        content_item_html_soup=BeautifulSoup(content_item_html.text,features='html.parser')
        bookname = content_item_html_soup.find(class_="bookname").find('h1').get_text()
        content = re.sub('<br/>','',content_item_html_soup.find( id='content').text)
        with open(path+bookname+'.txt','wb') as f :
            f.write(str(content).encode('utf-8'))

#创建文件夹
def mkdir(path):

    # 去除首位空格
    path=path.strip()
    # 去除尾部 \ 符号
    path=path.rstrip("\\")

    # 判断路径是否存在
    # 存在     True
    # 不存在   False
    isExists=os.path.exists(path)

    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        # 创建目录操作函数
        os.makedirs(path)

        print (path+' 创建成功')
        return True
    else:
        # 如果目录存在则不创建，并提示目录已存在
        print (path+' 目录已存在')
        return False

class myThread (threading.Thread):   #继承父类threading.Thread
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter
    def run(self):                   #把要执行的代码写到run函数里面 线程在创建后会直接运行run函数
        print ("Starting " + self.name)
        getContent(url_list[self.threadID],path_list[self.threadID])
        print ("Exiting " + self.name)

#遍历页面元素并生成图片和小说
for item in item_list:
    img = item.find(class_="image").find("a").find("img")
    img_src = img.attrs.get('src')
    img_name = img.attrs.get('alt')
    img_request = requests.get(img_src)

    path = '/Users/wuxb/Documents/novel/'+img_name+"/"
    mkdir(path)

    #将目录存入列表方便线程使用
    path_list.append(path)

    #将url存入列表方便线程使用
    url_list.append(item.find(class_="image").find("a").attrs.get('href'))

    #getContent(item.find(class_="image").find("a").attrs.get('href'),path)
    with open(path+img_name+".jpg",'wb') as f :
        f.write(img_request.content)

#创建线程
for num in range(len(item_list)):
    xsThread = myThread(num,'Thread-'+str(num),num)
    xsThread.start()
    thread_list.append(xsThread)

for t in  thread_list:
    t.join()

print ('结束')